package com.fang.networkdisk.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fang.common.common.CommonPage;
import com.fang.common.exception.ExceptionCode;
import com.fang.common.exception.NetworkDiskException;
import com.fang.networkdisk.entity.bo.RolePermitRelationBo;
import com.fang.networkdisk.entity.po.TbNetDisRolePermitRelation;
import com.fang.networkdisk.entity.vo.RolePermitRelationVo;
import com.fang.networkdisk.mapper.TbNetDisRolePermitRelationMapper;
import com.fang.networkdisk.service.TbNetDisRolePermitRelationService;
import com.fang.networkdisk.util.NDBeanUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Date;
import java.util.List;

/**
 * <p>
 * 角色-权限关联关系表 服务实现类
 * </p>
 *
 * @author Bernie_fang
 * @since 2024-12-07
 */
@Service
public class TbNetDisRolePermitRelationServiceImpl extends ServiceImpl<TbNetDisRolePermitRelationMapper, TbNetDisRolePermitRelation> implements TbNetDisRolePermitRelationService {
    @Resource
    private TbNetDisRolePermitRelationMapper rolePermitRelationMapper;
    
    @Override
    public CommonPage queryRolePermitRelation(RolePermitRelationBo rolePermitRelationBo) {
        rolePermitRelationBo.setOffset((rolePermitRelationBo.getCurPage() - 1) * rolePermitRelationBo.getPageSize());
        List<RolePermitRelationVo> requestPathVos = this.rolePermitRelationMapper.queryRolePermitRelation(rolePermitRelationBo);
        int total = this.rolePermitRelationMapper.queryRolePermitRelationCount(rolePermitRelationBo);
        CommonPage result = new CommonPage(rolePermitRelationBo.getCurPage(), total, requestPathVos);
        return result;
    }

    @Override
    public TbNetDisRolePermitRelation findRolePermitRelationByRoleIdPermissionId(int roleId, int permissionId) {
        QueryWrapper<TbNetDisRolePermitRelation> wrapper = new QueryWrapper<>();
        wrapper.eq("role_id", roleId).eq("permission_id", permissionId).eq("deleted", false);
        return rolePermitRelationMapper.selectOne(wrapper);
    }

    @Override
    public int addRolePermitRelation(RolePermitRelationBo rolePermitRelationBo) {
        TbNetDisRolePermitRelation db_rolePermitRelation = findRolePermitRelationByRoleIdPermissionId(rolePermitRelationBo.getRoleId(), rolePermitRelationBo.getPermissionId());
        if (NDBeanUtils.isObjectNotEmpty(db_rolePermitRelation)) {
            throw new NetworkDiskException(ExceptionCode.DATA_DUPLICATE);
        }
        TbNetDisRolePermitRelation rolePermitRelation = new TbNetDisRolePermitRelation();
        NDBeanUtils.copyListProperties(rolePermitRelationBo, rolePermitRelation);
        return rolePermitRelationMapper.insert(rolePermitRelation);
    }

    @Override
    public int updateRolePermitRelationById(RolePermitRelationBo rolePermitRelationBo) {
        TbNetDisRolePermitRelation db_rolePermitRelation = findRolePermitRelationByRoleIdPermissionId(rolePermitRelationBo.getRoleId(), rolePermitRelationBo.getPermissionId());
        if (NDBeanUtils.isObjectNotEmpty(db_rolePermitRelation)) {
            throw new NetworkDiskException(ExceptionCode.DATA_DUPLICATE);
        }
        TbNetDisRolePermitRelation rolePermitRelation = new TbNetDisRolePermitRelation();
        NDBeanUtils.copyListProperties(rolePermitRelationBo, rolePermitRelation);
        return rolePermitRelationMapper.updateById(rolePermitRelation);
    }

    @Override
    public int deleteRolePermitRelationById(Integer id, String authorId) {
        UpdateWrapper<TbNetDisRolePermitRelation> wrapper = new UpdateWrapper<>();
        wrapper.set("update_user", authorId)
                .set("updated_time", new Date())
                .set("deleted", true)
                .eq("id", id);
        return rolePermitRelationMapper.update(null, wrapper);
    }
}
